import { notFound, redirect } from 'next/navigation'
import { getEntity, getEntityRegistry, getChildEntities, setEntityRegistry } from '@nextsparkjs/core/lib/entities/queries'
import { EntityDetailWrapper } from '@nextsparkjs/core/components/entities/wrappers/EntityDetailWrapper'
import type { Metadata } from 'next'
import { TemplateService } from '@nextsparkjs/core/lib/services/template.service'
import type { EntityConfig, ChildEntityDefinition } from '@nextsparkjs/core/lib/entities/types'
// Import registry directly - webpack resolves @nextsparkjs/registries alias at compile time
import { ENTITY_REGISTRY, ENTITY_METADATA } from '@nextsparkjs/registries/entity-registry'
// Initialize registry at module load time (before any component renders)
setEntityRegistry(ENTITY_REGISTRY, ENTITY_METADATA)
// Type guard to check if entity is a full EntityConfig
function isEntityConfig(entity: EntityConfig | ChildEntityDefinition): entity is EntityConfig {
return 'slug' in entity
}
interface PageProps {
params: Promise<{
entity: string
id: string
}>
}
async function EntityDetailPage({ params }: PageProps) {
const resolvedParams = await params
const entitySlug = resolvedParams.entity
// Check if there's a specific template override for this entity
// e.g., app/dashboard/(main)/boards/[id]/page.tsx for boards
const specificTemplatePath = `app/dashboard/(main)/${entitySlug}/[id]/page.tsx`
if (TemplateService.hasOverride(specificTemplatePath)) {
const OverrideComponent = TemplateService.getComponent(specificTemplatePath)
if (OverrideComponent) {
console.log(`🎨 Entity-specific template override applied for ${specificTemplatePath}`)
return
}
}
// Verificar que la entidad existe en el registro
if (!(entitySlug in getEntityRegistry())) {
notFound()
}
const entityConfig = getEntity(entitySlug as string)
if (!entityConfig || !isEntityConfig(entityConfig)) {
notFound()
}
// Verificar que la entidad está habilitada
if (!entityConfig.enabled) {
notFound()
}
// Check if entity should be accessible via dashboard route
// Entities with showInMenu: false are managed elsewhere (e.g., settings)
if (!entityConfig.ui?.dashboard?.showInMenu) {
notFound()
}
// Builder-enabled entities redirect to edit view
// Detail view doesn't make sense for entities using the page builder
if (entityConfig.builder?.enabled) {
redirect(`/dashboard/${entitySlug}/${resolvedParams.id}/edit`)
}
// Get child entities for this parent entity
const childEntities = getChildEntities(entitySlug as string)
const childEntityNames = childEntities.map(child => child.name)
return (
)
}
export const metadata: Metadata = {
title: 'Dashboard',
description: 'View entity details'
}
export default EntityDetailPage